package com.itheima.tanhua.member.service.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.tanhua.base.common.BaseContext;
import com.itheima.tanhua.base.common.Result;
import com.itheima.tanhua.base.entity.ThRecommendation;
import com.itheima.tanhua.member.mapper.ThRecommendationMapper;
import com.itheima.tanhua.member.service.ThRecommendationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 推荐表 服务实现类
 * </p>
 *
 * @author yangjiahao
 * @since 2023-02-01
 */
@Service
public class ThRecommendationServiceImpl extends ServiceImpl<ThRecommendationMapper, ThRecommendation> implements ThRecommendationService {

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public Result redisGeo(Double longitude, Double latitude) {

        String key = BaseContext.getCurrentId();

        RedisGeoCommands.GeoRadiusCommandArgs args =
                RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs()
                        // 升序（由近到远）
                        .sortAscending()
                        // 最大查询数量
                        .limit(10);
            // 步骤3：声明圆心坐标
            // 参数1：longitude 经度
            // 参数2：latitude 纬度
        Point point = new Point(longitude, latitude);
            // 步骤4：声明距离
            // 参数1：数值（可以用Double类型，传小数）
            // 参数2；单位（MILES 英里 = 1.609344千米，KILOMETERS 千米）
        Distance distance = new Distance(2, Metrics.KILOMETERS);
            // 步骤2：画圆
            // 参数1：圆心
            // 参数2：半径
        Circle circle = new Circle(point, distance);
            // 步骤1：搜周边
            // 参数1：key 存储坐标的集合名称
            // 参数2：circle 圆圈范围
            // 参数3：查询参数
        GeoResults<RedisGeoCommands.GeoLocation<String>> radius =
                redisTemplate.opsForGeo().radius(key, circle, args);
        return null;
    }
}
